import csv
from py2neo import Graph, Node, Relationship, NodeMatcher, NodeMatcher
import py2neo

# graph直接写账号密码会不安全

# g = Graph("http://localhost:7474", auth=("neo4j", "Shw25763189"))
g = Graph("http://localhost:7474", auth=("ruanxie", "123456")) # 这里我切换了下数据库
# 创建config以及db.cfg用来存储信息
# 创建实体
    # 关系建立
matcher = NodeMatcher(g)
with open('课程知识图谱数据/关系/知识点-前置知识点-知识点.csv', 'r', encoding='ANSI') as f:
    # 数据集除了第一行代表属性外，第一列为实体1，第二列为实体2，第三列是两者英文关系，第四列为两者中文关系
    reader = csv.reader(f)
    for item in reader:
        # 第一行的标签不是咱们需要的内容，line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前关系：", reader.line_num, "当前内容", item)
        findnode = matcher.match('知识点', id=item[0]).first()
        endnode = matcher.match('知识点', id=item[1]).first()
        relationships = Relationship(findnode, '前置知识点', endnode)
        g.merge(relationships, "", "id")
with open('课程知识图谱数据/关系/知识点-后继知识点-知识点.csv', 'r', encoding='ANSI') as f:
    # 数据集除了第一行代表属性外，第一列为实体1，第二列为实体2，第三列是两者英文关系，第四列为两者中文关系
    reader = csv.reader(f)
    for item in reader:
        # 第一行的标签不是咱们需要的内容，line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前行数：", reader.line_num, "当前内容", item)
        findnode = matcher.match('知识点', id=item[0]).first()
        endnode = matcher.match('知识点', id=item[1]).first()
        relationships = Relationship(findnode, '后继知识点', endnode)
        g.merge(relationships, "", "id")
with open('课程知识图谱数据/关系/知识单元-前置知识单元-知识单元.csv', 'r', encoding='ANSI') as f:
    # 数据集除了第一行代表属性外，第一列为实体1，第二列为实体2，第三列是两者英文关系，第四列为两者中文关系
    reader = csv.reader(f)
    for item in reader:
        # 第一行的标签不是咱们需要的内容，line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前行数：", reader.line_num, "当前内容", item)
        findnode = matcher.match('知识单元', id=item[0]).first()
        endnode = matcher.match('知识单元', id=item[1]).first()
        relationships = Relationship(findnode, '前置知识单元', endnode)
        g.merge(relationships, "", "id")
with open('课程知识图谱数据/关系/知识单元-后继知识单元-知识单元.csv', 'r', encoding='ANSI') as f:
    # 数据集除了第一行代表属性外，第一列为实体1，第二列为实体2，第三列是两者英文关系，第四列为两者中文关系
    reader = csv.reader(f)
    for item in reader:
        # 第一行的标签不是咱们需要的内容，line_num表示文件的第几行
        if reader.line_num == 1:
            continue
        print("当前行数：", reader.line_num, "当前内容", item)
        findnode = matcher.match('知识单元', id=item[0]).first()
        endnode = matcher.match('知识单元', id=item[1]).first()
        relationships = Relationship(findnode, '后继知识单元', endnode)
        g.merge(relationships, "", "id")